const jwt = require('jsonwebtoken');
const User = require('../models/User');

// JWT密钥，应该放在环境变量中
const JWT_SECRET = process.env.JWT_SECRET || 'your_jwt_secret_key';

// 验证令牌
const auth = (req, res, next) => {
  // 获取请求头中的令牌
  const token = req.header('x-auth-token');

  // 检查是否有令牌
  if (!token) {
    return res.status(401).json({ message: '无令牌，授权被拒绝' });
  }

  try {
    // 验证令牌
    const decoded = jwt.verify(token, JWT_SECRET);
    
    // 将用户ID添加到请求对象
    req.user = decoded;
    next();
  } catch (err) {
    res.status(401).json({ message: '令牌无效' });
  }
};

// 验证管理员
const admin = async (req, res, next) => {
  try {
    const user = await User.findById(req.user.id);
    
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    if (user.role !== 'admin') {
      return res.status(403).json({ message: '需要管理员权限' });
    }
    
    next();
  } catch (err) {
    console.error('验证管理员错误:', err.message);
    res.status(500).json({ message: '服务器错误' });
  }
};

module.exports = { auth, admin }; 